home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_gnu / adainc / i-cpthre.ads < prev    next >
Text File  |  1996-01-30  |  11KB  |  313 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                 GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS               --
  4. --                                                                          --
  5. --                 I N T E R F A C E S . C . P T H R E A D S                --
  6. --                                                                          --
  7. --                                  S p e c                                 --
  8. --                                                                          --
  9. --                             $Revision: 1.6 $                             --
  10. --                                                                          --
  11. --       Copyright (c) 1991,1992,1993,1994, FSU, All Rights Reserved        --
  12. --                                                                          --
  13. -- GNARL is free software; you can redistribute it  and/or modify it  under --
  14. -- terms  of  the  GNU  Library General Public License  as published by the --
  15. -- Free Software  Foundation;  either version 2, or (at  your  option)  any --
  16. -- later  version.  GNARL is distributed  in the hope that  it will be use- --
  17. -- ful, but but WITHOUT ANY WARRANTY;  without even the implied warranty of --
  18. -- MERCHANTABILITY  or  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Gen- --
  19. -- eral Library Public License  for more details.  You should have received --
  20. -- a  copy of the GNU Library General Public License along with GNARL;  see --
  21. -- file COPYING.LIB.  If not,  write to the  Free Software Foundation,  675 --
  22. -- Mass Ave, Cambridge, MA 02139, USA.                                      --
  23. --                                                                          --
  24. ------------------------------------------------------------------------------
  25.  
  26. --  This package interfaces with Pthrads. It is not a complete interface;
  27. --  it only includes what is needed to implement the Ada runtime.
  28.  
  29. with System;
  30.  
  31. with Interfaces.C.POSIX_Constants;
  32. --  Used for, Add_Prio
  33. --            pthread_attr_t_size
  34. --            pthread_mutexattr_t_size
  35. --            pthread_mutex_t_size
  36. --            pthread_condattr_t_size
  37. --            pthread_cond_t_size
  38. --            NO_PRIO_INHERIT
  39. --            PRIO_INHERIT
  40. --            PRIO_PROTECT
  41.  
  42. with Interfaces.C.POSIX_RTE;
  43. --  Used for, Signal,
  44. --            Signal_Set
  45.  
  46. with Interfaces.C.POSIX_Error; use Interfaces.C.POSIX_Error;
  47. --  Used for, Return_Code
  48.  
  49. with Interfaces.C.POSIX_Timers;
  50. --  Used for, timespec
  51.  
  52. package Interfaces.C.Pthreads is
  53.  
  54.    Pthreads_Error : exception;
  55.  
  56.    type Priority_Type is new int;
  57.  
  58.    type pthread_t       is private;
  59.    type pthread_mutex_t is private;
  60.    type pthread_cond_t  is private;
  61.  
  62.    type pthread_attr_t      is private;
  63.    type pthread_mutexattr_t is private;
  64.    type pthread_condattr_t  is private;
  65.    type pthread_key_t       is private;
  66.    type pthread_protocol_t  is private;
  67.  
  68.    NO_PRIO_INHERIT : constant pthread_protocol_t;
  69.    PRIO_INHERIT    : constant pthread_protocol_t;
  70.    PRIO_PROTECT    : constant pthread_protocol_t;
  71.  
  72.    procedure pthread_attr_init
  73.      (attributes : out pthread_attr_t;
  74.       result     : out Return_Code);
  75.    pragma Inline (pthread_attr_init);
  76.  
  77.    procedure pthread_attr_destroy
  78.      (attributes : in out pthread_attr_t;
  79.       result     : out Return_Code);
  80.    pragma Inline (pthread_attr_init);
  81.  
  82.    procedure pthread_attr_setstacksize
  83.      (attr      : in out pthread_attr_t;
  84.       stacksize : size_t;
  85.       result    : out Return_Code);
  86.    pragma Inline (pthread_attr_setstacksize);
  87.  
  88.    procedure pthread_attr_setdetachstate
  89.      (attr        : in out pthread_attr_t;
  90.       detachstate : int;
  91.       Result      : out Return_Code);
  92.    pragma Inline (pthread_attr_setdetachstate);
  93.  
  94.    procedure pthread_create
  95.      (thread        : out pthread_t;
  96.       attributes    : pthread_attr_t;
  97.       start_routine : System.Address;
  98.       arg           : System.Address;
  99.       result        : out Return_Code);
  100.    pragma Inline (pthread_create);
  101.  
  102.    procedure pthread_init;
  103.  
  104.    function pthread_self return pthread_t;
  105.    pragma Inline (pthread_self);
  106.  
  107.    procedure pthread_detach
  108.      (thread : in out pthread_t;
  109.       result : out Return_Code);
  110.    pragma Inline (pthread_detach);
  111.  
  112.    procedure pthread_mutexattr_init
  113.      (attributes : out pthread_mutexattr_t;
  114.       result     : out Return_Code);
  115.    pragma Inline (pthread_mutexattr_init);
  116.  
  117.    procedure pthread_mutexattr_setprotocol
  118.      (attributes : in out pthread_mutexattr_t;
  119.       protocol   : pthread_protocol_t;
  120.       result     : out Return_Code);
  121.    pragma Inline (pthread_mutexattr_setprotocol);
  122.  
  123.    procedure pthread_mutexattr_setprio_ceiling
  124.      (attributes   : in out pthread_mutexattr_t;
  125.       prio_ceiling : int;
  126.       result       : out Return_Code);
  127.    pragma Inline (pthread_mutexattr_setprio_ceiling);
  128.  
  129.    procedure pthread_mutex_init
  130.      (mutex      : out pthread_mutex_t;
  131.       attributes : pthread_mutexattr_t;
  132.       result     : out Return_Code);
  133.    pragma Inline (pthread_mutex_init);
  134.  
  135.    procedure pthread_mutex_destroy
  136.      (mutex  : in out pthread_mutex_t;
  137.       result : out Return_Code);
  138.    pragma Inline (pthread_mutex_destroy);
  139.  
  140.    procedure pthread_mutex_trylock
  141.      (mutex  : in out pthread_mutex_t;
  142.       result : out Return_Code);
  143.    pragma Inline (pthread_mutex_trylock);
  144.  
  145.    procedure pthread_mutex_lock
  146.      (mutex  : in out pthread_mutex_t;
  147.       result : out Return_Code);
  148.    pragma Inline (pthread_mutex_lock);
  149.  
  150.    procedure pthread_mutex_unlock
  151.      (mutex  : in out pthread_mutex_t;
  152.       result : out Return_Code);
  153.    pragma Inline (pthread_mutex_unlock);
  154.  
  155.    procedure pthread_cond_init
  156.      (condition  : out pthread_cond_t;
  157.       attributes : pthread_condattr_t;
  158.       result     : out Return_Code);
  159.    pragma Inline (pthread_cond_init);
  160.  
  161.    procedure pthread_cond_wait
  162.      (condition : in out pthread_cond_t;
  163.       mutex     : in out pthread_mutex_t;
  164.       result    : out Return_Code);
  165.    pragma Inline (pthread_cond_wait);
  166.  
  167.    procedure pthread_cond_timedwait
  168.      (condition     : in out pthread_cond_t;
  169.       mutex         : in out pthread_mutex_t;
  170.       absolute_time : POSIX_Timers.timespec;
  171.       result        : out Return_Code);
  172.    pragma Inline (pthread_cond_timedwait);
  173.  
  174.    procedure pthread_cond_signal
  175.      (condition : in out pthread_cond_t;
  176.       result    : out Return_Code);
  177.    pragma Inline (pthread_cond_signal);
  178.  
  179.    procedure pthread_cond_broadcast
  180.      (condition : in out pthread_cond_t;
  181.       result    : out Return_Code);
  182.    pragma Inline (pthread_cond_broadcast);
  183.  
  184.    procedure pthread_cond_destroy
  185.      (condition : in out pthread_cond_t;
  186.       result    : out Return_Code);
  187.    pragma Inline (pthread_cond_destroy);
  188.  
  189.    procedure pthread_condattr_init
  190.      (attributes : out pthread_condattr_t;
  191.       result     : out Return_Code);
  192.    pragma Inline (pthread_condattr_init);
  193.  
  194.    procedure pthread_condattr_destroy
  195.      (attributes : in out pthread_condattr_t;
  196.       result     : out Return_Code);
  197.    pragma Inline (pthread_condattr_destroy);
  198.  
  199.    procedure pthread_setspecific
  200.      (key    : pthread_key_t;
  201.       value  : System.Address;
  202.       result : out Return_Code);
  203.    pragma Inline (pthread_setspecific);
  204.  
  205.    procedure pthread_getspecific
  206.      (key    : pthread_key_t;
  207.       value  : out System.Address;
  208.       result : out Return_Code);
  209.    pragma Inline (pthread_getspecific);
  210.  
  211.    procedure pthread_key_create
  212.      (key        : out pthread_key_t;
  213.       destructor : System.Address;
  214.       result     : out Return_Code);
  215.    pragma Inline (pthread_key_create);
  216.  
  217.    procedure pthread_attr_setprio
  218.      (attr     : in out pthread_attr_t;
  219.       priority : Priority_Type;
  220.       result   : out Return_Code);
  221.    pragma Inline (pthread_attr_setprio);
  222.  
  223.    procedure pthread_attr_getprio
  224.      (attr     : pthread_attr_t;
  225.       priority : out Priority_Type;
  226.       result   : out Return_Code);
  227.    pragma Inline (pthread_attr_getprio);
  228.  
  229.    procedure pthread_setschedattr
  230.      (thread     : pthread_t;
  231.       attributes : pthread_attr_t;
  232.       result     : out Return_Code);
  233.    pragma Inline (pthread_setschedattr);
  234.  
  235.    procedure pthread_getschedattr
  236.      (thread     : pthread_t;
  237.       attributes : out pthread_attr_t;
  238.       result     : out Return_Code);
  239.    pragma Inline (pthread_getschedattr);
  240.  
  241.    procedure pthread_exit (status : System.Address);
  242.    pragma Interface (C, pthread_exit);
  243.    pragma Interface_Name (pthread_exit, "pthread_exit");
  244.  
  245.    procedure sigwait
  246.      (set    : POSIX_RTE.Signal_Set;
  247.       sig    : out POSIX_RTE.Signal;
  248.       result : out Return_Code);
  249.    pragma Inline (sigwait);
  250.  
  251.    procedure pthread_kill
  252.      (thread : pthread_t; sig : POSIX_RTE.Signal;
  253.       result : out Return_Code);
  254.    pragma Inline (pthread_kill);
  255.  
  256.    procedure pthread_cleanup_push
  257.      (routine : System.Address;
  258.       arg     : System.Address);
  259.    pragma Inline (pthread_cleanup_push);
  260.  
  261.    procedure pthread_cleanup_pop (execute : int);
  262.    pragma Inline (pthread_cleanup_pop);
  263.  
  264.    procedure pthread_yield;
  265.    pragma Inline (pthread_yield);
  266.  
  267. private
  268.  
  269.    type pthread_attr_t is
  270.      array (1 .. POSIX_Constants.pthread_attr_t_size) of unsigned;
  271.    for pthread_attr_t'Alignment use 8;
  272.  
  273.    type pthread_mutexattr_t is
  274.      array (1 .. POSIX_Constants.pthread_mutexattr_t_size) of unsigned;
  275.    for pthread_mutexattr_t'Alignment use 8;
  276.  
  277.    type pthread_mutex_t is
  278.      array (1 .. POSIX_Constants.pthread_mutex_t_size) of unsigned;
  279.    for pthread_mutex_t'Alignment use 8;
  280.  
  281.    type pthread_condattr_t is
  282.      array (1 .. POSIX_Constants.pthread_condattr_t_size) of unsigned;
  283.    for pthread_condattr_t'Alignment use 8;
  284.  
  285.    type pthread_cond_t is
  286.      array (1 .. POSIX_Constants.pthread_cond_t_size) of unsigned;
  287.    for pthread_cond_t'Alignment use 8;
  288.  
  289. --   type pthread_t is
  290. --     array (1 .. POSIX_Constants.pthread_t_size) of unsigned;
  291.    type pthread_t is new unsigned;
  292.    --  ??? The use of an array here (of one element, usually) seems to cause
  293.    --  problems in the compiler.  It put a long word 4 in the
  294.    --  instruction stream of Interfaces.C.Pthreads.pthread_self.  This
  295.    --  is obviously meant to provide some clue as to what size
  296.    --  item it is to return, but pthread_self tried to execute it.
  297.  
  298.    type pthread_key_t is new unsigned;
  299.    --  This type is passed as a scaler into a C function. It must
  300.    --  be declared as a scaler, not an array.  This being so, an unsigned
  301.    --  should work.
  302.  
  303.    type pthread_protocol_t is new int;
  304.  
  305.    NO_PRIO_INHERIT : constant pthread_protocol_t :=
  306.                                            POSIX_Constants.NO_PRIO_INHERIT;
  307.    PRIO_INHERIT    : constant pthread_protocol_t :=
  308.                                            POSIX_Constants.PRIO_INHERIT;
  309.    PRIO_PROTECT     : constant pthread_protocol_t :=
  310.                                            POSIX_Constants.PRIO_PROTECT;
  311.  
  312. end Interfaces.C.Pthreads;
  313.